home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / GEM / AESEVENT.D next >
Encoding:
Modula Definition  |  1990-12-06  |  11.9 KB  |  271 lines

  1. DEFINITION MODULE AESEvents;
  2.  
  3.  
  4. (*  Megamax Modula-2 GEM-Library:  Die AES Ereignisfunktionen
  5.  *
  6.  *  Autor: Manuel Chakravarty           Erstellt:  05.11.87
  7.  *
  8.  *  Version   2.3     V#0018
  9.  *)
  10.  
  11.  
  12. (*      In diesem Modul sind die vom AES zur Verfügung gestellten Eingabe-
  13.  *      funktionen zusammengefaßt.
  14.  *      Jedes einzelne Ereigniss kann entweder allein erfragt werden, oder
  15.  *      es kann auf eine ganze Reihe von Ereignissen gleichzeitig gewartet
  16.  *      werden ('MultiEvent').
  17.  *)
  18.  
  19.  
  20. FROM SYSTEM     IMPORT WORD;
  21.  
  22. FROM GrafBase   IMPORT Point, Rectangle;
  23.  
  24. FROM GEMGlobals IMPORT GemChar, MButtonSet, SpecialKeySet;
  25.  
  26.  
  27. CONST   (*  Identifikationen der einzelnen Nachrichtenereignisse
  28.          *)
  29.         unspecMessage   = 0;
  30.         menuSelected    = 10;
  31.         windRedraw      = 20;
  32.         windTopped      = 21;
  33.         windClosed      = 22;
  34.         windFulled      = 23;
  35.         windArrowed     = 24;
  36.         windHSlid       = 25;
  37.         windVSlid       = 26;
  38.         windSized       = 27;
  39.         windMoved       = 28;
  40.         windNewTop      = 29;
  41.         accOpen         = 40;
  42.         accClose        = 41;
  43.  
  44.  
  45. TYPE  (*  Eine Variable folgenden Typs wird bei der AES-Nachricht
  46.        *  'windArrowed' geliefert. Es bedeutet:
  47.        *
  48.        *  'pageUp'      -- Fensterinhalt soll um eine Seite nach oben ge-
  49.        *                   schoben werden.
  50.        *  'pageDown'    -- Fensterinhalt eine Seite nach unten.
  51.        *  'rowUp'       -- Eine Zeile nach oben.
  52.        *  'rowDown'     -- Eine Zeile nach unten.
  53.        *  'pageLeft'    -- Eine Seite nach links.
  54.        *  'pageRight'   -- Eine Seite nach rechts.
  55.        *  'columnLeft'  -- Eine Spalte nach links.
  56.        *  'columnRight' -- Eine Spalte nach rechts.
  57.        *)
  58.       ArrowedMode = (pageUp, pageDown, rowUp, rowDown, pageLeft,
  59.                      pageRight, columnLeft, columnRight);
  60.  
  61.       MessageBuffer = RECORD CASE : CARDINAL OF 0:
  62.                         CASE msgType: CARDINAL OF
  63.                           unspecMessage : uMsgId   : CARDINAL;
  64.                                           uMsgRmd  : CARDINAL;
  65.                                           uMsgData : ARRAY[0..4] OF WORD|
  66.                           menuSelected  : mSelId   : CARDINAL;
  67.                                           mSelRmd  : CARDINAL;
  68.                                           selTitle : CARDINAL;
  69.                                           selItem  : CARDINAL|
  70.                           windRedraw    : rdrwId   : CARDINAL;
  71.                                           rdrwRmd  : CARDINAL;
  72.                                           rdrwHdl  : CARDINAL;
  73.                                           rdrwFrame: Rectangle|
  74.                           windTopped    : topId    : CARDINAL;
  75.                                           topRmd   : CARDINAL;
  76.                                           topHdl   : CARDINAL|
  77.                           windClosed    : clsId    : CARDINAL;
  78.                                           clsRmd   : CARDINAL;
  79.                                           clsHdl   : CARDINAL|
  80.                           windFulled    : fullId   : CARDINAL;
  81.                                           fullRmd  : CARDINAL;
  82.                                           fullHdl  : CARDINAL|
  83.                           windArrowed   : arrwId   : CARDINAL;
  84.                                           arrwRmd  : CARDINAL;
  85.                                           arrwHdl  : CARDINAL;
  86.                                           arrwMode : ArrowedMode|
  87.                           windHSlid     : hSldId   : CARDINAL;
  88.                                           hSldRmd  : CARDINAL;
  89.                                           hSldHdl  : CARDINAL;
  90.                                           horPos   : CARDINAL|
  91.                           windVSlid     : vSldId   : CARDINAL;
  92.                                           vSldRmd  : CARDINAL;
  93.                                           vSldHdl  : CARDINAL;
  94.                                           vertPos  : CARDINAL|
  95.                           windSized     : sizeId   : CARDINAL;
  96.                                           sizeRmd  : CARDINAL;
  97.                                           sizeHdl  : CARDINAL;
  98.                                           sizeFrame: Rectangle|
  99.                           windMoved     : moveId   : CARDINAL;
  100.                                           moveRmd  : CARDINAL;
  101.                                           moveHdl  : CARDINAL;
  102.                                           moveFrame: Rectangle|
  103.                           windNewTop    : nwTpId   : CARDINAL;
  104.                                           nwTpRmd  : CARDINAL;
  105.                                           nwTpHdl  : CARDINAL|
  106.                           accOpen       : aOpnId   : CARDINAL;
  107.                                           aOpnRmd  : CARDINAL;
  108.                                           aOpnVoid : WORD;
  109.                                           aOpnMId  : CARDINAL|
  110.                           accClose      : aClsId   : CARDINAL;
  111.                                           aClsRmd  : CARDINAL;
  112.                                           aClsMId  : CARDINAL|
  113.                         END| 1:
  114.                           int: ARRAY [0..7] OF INTEGER;
  115.                         END
  116.                       END;
  117.  
  118.  
  119.                         (*  Event-Manager-Prozeduren  *)
  120.                         (*  ========================  *)
  121.  
  122. PROCEDURE KeyboardEvent (VAR ch: GemChar);
  123.  
  124.         (*  Wartet auf ein Tastaturereignis (Tastendruck).
  125.          *
  126.          *  In 'ch' wird der Scancode und falls vorhanden der zugehörige
  127.          *  ASCII-Code geliefert.
  128.          *)
  129.  
  130. PROCEDURE ButtonEvent (    clicks     : CARDINAL;
  131.                            mask, state: MButtonSet;
  132.                        VAR mouseLoc   : Point;
  133.                        VAR buttons    : MButtonSet;
  134.                        VAR keyState   : SpecialKeySet;
  135.                        VAR doneClicks : CARDINAL);
  136.  
  137.         (*  Wartet auf ein Maustastenereignis (d.h. darauf, das die Maus-
  138.          *  tasten auf eine bestimmte Art gedrückt oder losgelassen werden).
  139.          *
  140.          *  Eingabeparameter:
  141.          *  -----------------
  142.          *
  143.          *  'clicks'    -- Ist der Wert größer als 1, so prüft die Routine,
  144.          *                 ob der gewünschte Zustand der Maustasten, inner-
  145.          *                 halb einer festgelegten Zeit nocheinmal eintritt.
  146.          *                 Diese Zeit kann mit 'SetDClickSpeed' gesetzt und
  147.          *                 mit 'DClickSpeed' erfragt werden.
  148.          *  'mask'      -- Alle in dieser Menge enthaltenen Maustasten wer-
  149.          *                 den von der Routine berücksichtigt (Ist 'mask'
  150.          *                 die leere Menge, so kehrt die Routine, unabhänig
  151.          *                 vom aktuellen Zustand der Maustasten, sofort zu-
  152.          *                 rück).
  153.          *  'state'     -- Bestimmt den Zustand (gedrückt oder nicht), in
  154.          *                 dem sich die einzelnen Maustasten befinden müs-
  155.          *                 sen, damit die Routine zurückkehrt (Nur die in
  156.          *                 'mask bezeichneten Tasten sind interessant).
  157.          *                 Die Tasten die gedrückt sein müssen, werden in
  158.          *                 die Menge eingetragen.
  159.          *
  160.          *   Ausgabeparameter:
  161.          *   -----------------
  162.          *
  163.          *  'mouseLoc'  -- Liefert die Mausposition zum Zeitpunkt des
  164.          *                 Ereignisses.
  165.          *  'buttons'   -- Liefert die Menge der zum Zeitpunkt des Ereignis-
  166.          *                 ses gedrückten Maustasten.
  167.          *  'keyState'  -- Liefert die Menge der zum Zeitpunkt des Ereignis-
  168.          *                 ses gedrückten Sondertasten.
  169.          *  'doneclicks'-- Liefert wie oft der gewünschte Zustand der Maus-
  170.          *                 tasten während der Abfrage erreicht wurde.
  171.          *)
  172.                       
  173.  
  174. TYPE    RectEnterMode   = (lookForEntry, lookForExit);
  175.                      
  176. PROCEDURE MouseEvent (    moveDirec: RectEnterMode;
  177.                           frame    : Rectangle;
  178.                       VAR buttons  : MButtonSet;
  179.                       VAR keyState : SpecialKeySet;
  180.                       VAR mouseLoc : Point);
  181.  
  182.         (*  Wartet auf ein Mausereignis (d.h. darauf, daß der Mauszeiger
  183.          *  einen bestimmten Bildschirmbereich betritt oder verläßt).
  184.          *
  185.          *  Eingabeparameter:
  186.          *  -----------------
  187.          *
  188.          *  'moveDirec' -- Legt fest, ob der Mauszeiger den Bereich be-
  189.          *                 tretten oder verlassen muß.
  190.          *  'frame'     -- Legt den zu überwachenden Bereich fest.
  191.          *
  192.          *   Ausgabeparameter:
  193.          *   -----------------
  194.          *
  195.          *  'buttons'   -- Liefert die Menge der zum Zeitpunkt des Ereignis-
  196.          *                 ses gedrückten Maustasten.
  197.          *  'keyState'  -- Liefert die Menge der zum Zeitpunkt des Ereignis-
  198.          *                 ses gedrückten Sondertasten.
  199.          *  'mouseLoc'  -- Liefert die Mausposition, zum Zeitpunkt des Er-
  200.          *                 eingnisses.
  201.          *)
  202.                      
  203. PROCEDURE TimerEvent (time: LONGCARD);
  204.  
  205.         (*  Wartet auf ein Zeitereignis (d.h. bis eine bestimmte Zeitspanne
  206.          *  vergangen ist).
  207.          *
  208.          *  'time' -- Zeitspanne in Millisekunden.
  209.          *)
  210.  
  211. PROCEDURE MessageEvent (VAR msg: MessageBuffer);
  212.  
  213.         (*  Wartet auf ein Nachrichtenereignis (sowohl vom AES als auch von
  214.          *  einer anderen Applikation).
  215.          *
  216.          *  'msg' -- Liefert die empfangene Nachricht.
  217.          *
  218.          *  Hinweis: Da das GEM nur sehr eingeschränkte Multitaskingfähig-
  219.          *           keiten besitzt, muß eine von zwei Applikationen, die
  220.          *           miteinander kommunizieren wollen, ein Accessory sein.
  221.          *)
  222.  
  223.  
  224. TYPE    Event           = (keyboard, mouseButton, firstRect, secondRect,
  225.                            message, timer);
  226.         EventSet        = SET OF Event;
  227.         
  228. PROCEDURE MultiEvent (    events       : EventSet;
  229.                           noClicks     : CARDINAL;
  230.                           butMask,
  231.                           butState     : MButtonSet;
  232.                           moveDirec1   : RectEnterMode; rect1Size: Rectangle;
  233.                           moveDirec2   : RectEnterMode; rect2Size: Rectangle;
  234.                       VAR msg          : MessageBuffer;
  235.                           time         : LONGCARD;
  236.                       VAR mouseLoc     : Point;
  237.                       VAR buttons      : MButtonSet;
  238.                       VAR keyState     : SpecialKeySet;
  239.                       VAR key          : GemChar;
  240.                       VAR doneClicks   : CARDINAL;
  241.                       VAR occuredEvents: EventSet);
  242.                      
  243.         (*  Wartet auf eine beliebige Kombination von Ereignissen.
  244.          *
  245.          *  Dabei gibt 'events' an auf welche Ereignisse gewartet wird und
  246.          *  'occuredEvents' liefert die Menge der tatsächlich aufgetrettenen
  247.          *  Ereignistypen.
  248.          *  Alle anderen Parameter entsprechen den namensgleichen Parametern
  249.          *  der fünf vorangegangenen '...Event'-Prozeduren.
  250.          *
  251.          *  Besondere Beachtung verdient aber 'keyState': Es liefert den
  252.          *  Wert der Sondertasten zum Zeitpunkt der Abfrage und nicht etwa
  253.          *  den Wert, der beim Druck der Taste anstand! Wenn Sie dies näher
  254.          *  interessiert, beachten Sie das Modul "KbdEvent".
  255.          *)
  256.                      
  257. PROCEDURE SetDClickSpeed (speed: CARDINAL);
  258.  
  259.         (*  Legt die Zeitspanne fest, innerhalb derer zwei Klicks als Doppel-
  260.          *  klick gewertet werden.
  261.          *
  262.          *  'speed' -- Zeitspanne (Wertebereich: [0..4])
  263.          *)
  264.  
  265. PROCEDURE DClickSpeed (): CARDINAL;
  266.  
  267.         (*  Erfragt die mit 'SetDClickSpeed' gesetzte Zeitspanne.
  268.          *)
  269.                      
  270.                      
  271. END AESEvents.